package modelo;


import java.util.LinkedList;

import android.R.integer;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;


public class SQLiteManage {


	public static final String BD_NAME= "registoanalise1";
	public static final int BD_VERSION = 1;
	
	
	public static final String BD_TABLE= "pessoa";
	public static final String _ROWID = "id"; /*id do utilizador, pertence ha linha*/
	public static final String _NAME = "nome";
	public static final String _DT = "data_nacimento";
	public static final String _SEXO = "sexo";
	
	
	public static final String BD_TABLER= "registo";
	public static final String _ROWIDR = "id";
	public static final String _SIS = "sistolica";
	public static final String _DIA = "diastolica";
	public static final String _PUL = "pulsacao";
	public static final String _COMEN = "comentario";
	public static final String _SITIO = "sitio";
	public static final String _POSICAO = "posicao";
	public static final String _ESTADO = "estado";
	public static final String _DATA = "data";
	public static final String _HORA = "hora";
	public static final String _IDPESSOA = "idPessoa";
	public static final String _MENSAGEM = "Avaliacao";
	
	
	

	private DbHelper nAjuda;
	private final Context nContext;
	private SQLiteDatabase nBaseDados;
	
	private static class DbHelper extends SQLiteOpenHelper{

		public DbHelper(Context context
				) {
			super(context, BD_NAME, null, BD_VERSION);
			// TODO Auto-generated constructor stub
		}

		@Override
		public void onCreate(SQLiteDatabase db) {
			// TODO Auto-generated method stub
			String CREATE_CONTACTS_TABLE = "CREATE TABLE " + BD_TABLE + "("
            + _ROWID + " INTEGER PRIMARY KEY," + _NAME + " TEXT," + _DT + " TEXT," + _SEXO + " TEXT" + ")";
			
			db.execSQL(CREATE_CONTACTS_TABLE);
	
		
			String CREATE_REGISTO_TABLE = "CREATE TABLE " + BD_TABLER + "("
		    + _ROWIDR + " INTEGER PRIMARY KEY," + _SIS + " INTEGER," + _DIA + " INTEGER," + _PUL + " INTEGER," + 
		    _COMEN + " TEXT," + _SITIO + " TEXT," + _POSICAO + " TEXT," + _ESTADO + " TEXT," + _DATA + " TEXT," + _HORA + " TEXT," + _IDPESSOA + " TEXT," + _MENSAGEM + " TEXT" + ")";
		
			db.execSQL(CREATE_REGISTO_TABLE);
		}

		@Override
		public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
			// TODO Auto-generated method stub
		db.execSQL("DROP TABLE IF EXISTS " + BD_TABLE);
		onCreate(db);
		
		db.execSQL("DROP TABLE IF EXISTS " + BD_TABLER);
		onCreate(db);
		
		}
	}
	
		public SQLiteManage(Context c)
		{
			nContext = c;			
		}
		
		public SQLiteManage open() throws SQLException{
			nAjuda = new DbHelper(nContext);
			nBaseDados = nAjuda.getWritableDatabase();
			return this;
		}
		
	public void close()
	{
	nAjuda.close();	
	}
	
	public long createEntry(String name, String dataN, String sexo)
	{
		ContentValues cv = new ContentValues();
		cv.put(_NAME, name);
		cv.put(_DT, dataN);
		cv.put(_SEXO, sexo);
		
		return nBaseDados.insert(BD_TABLE, null, cv);
				
	}
	
	
	
	public long createEntryRegisto(int sistolica, 
			int diastolica, int pulsacao, String comentario, 
			String sitio, String posicao, String estado, String Data, 
			String Hora, int idPessoa, String mens )
	{
		ContentValues cv = new ContentValues();
		//cv.put(_ROWIDR, idRegisto);
		cv.put(_SIS, sistolica);
		cv.put(_DIA, diastolica);
		cv.put(_PUL, pulsacao);
		cv.put(_COMEN, comentario);
		cv.put(_SITIO, sitio);
		cv.put(_POSICAO, posicao);
		cv.put(_ESTADO, estado);
		cv.put(_DATA, Data);
		cv.put(_HORA, Hora);
		cv.put(_IDPESSOA, idPessoa);
		cv.put(_MENSAGEM, mens);
		
		return nBaseDados.insert(BD_TABLER, null, cv);
				
	}
	
	
	public LinkedList<Utilizador> listaUtilNome()
	{
		LinkedList<Utilizador> lista = new LinkedList<Utilizador>();
		String selectQuery = "SELECT  * FROM " + BD_TABLE; 
		Cursor c = nBaseDados.rawQuery(selectQuery, null);
	
		int iRow = c.getColumnIndex(_ROWID);
		int iName = c.getColumnIndex(_NAME);
		int iSexo = c.getColumnIndex(_SEXO);
		int iDataNasc = c.getColumnIndex(_DT);
		
		
		for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext())
		{
			Utilizador utilizador= new Utilizador(c.getInt(iRow) ,c.getString(iName), c.getString(iDataNasc), c.getString(iSexo));
			lista.add(utilizador);
			
		}
		return lista; 
		
	}
	
	public LinkedList<Registo> listaReg(int id)
	{
		LinkedList<Registo> registo = new LinkedList<Registo>();
		String selectQuery = "SELECT  * FROM " + BD_TABLER + " WHERE " + _IDPESSOA +"=" + id; 
		Cursor c = nBaseDados.rawQuery(selectQuery, null);
		
		int iSis = c.getColumnIndex(_SIS);
		int iDia = c.getColumnIndex(_DIA);
		int iPul = c.getColumnIndex(_PUL);
		int iCom = c.getColumnIndex(_COMEN);
		int iSit = c.getColumnIndex(_SITIO);
		int iPos = c.getColumnIndex(_POSICAO);
		int iEst = c.getColumnIndex(_ESTADO);
		int iData = c.getColumnIndex(_DATA);
		int iHora = c.getColumnIndex(_HORA);
		int iIDP = c.getColumnIndex(_IDPESSOA);
		int iRowR = c.getColumnIndex(_ROWIDR);
		int iMen = c.getColumnIndex(_MENSAGEM);
		
		
		for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext())
		{
			 Registo regis= new Registo(c.getInt(iRowR), c.getInt(iSis), c.getInt(iDia), c.getInt(iPul), c.getString(iCom), c.getString(iSit), c.getString(iPos),
					c.getString(iEst), c.getString(iData), c.getString(iHora), c.getInt(iIDP), c.getString(iMen));
			 registo.add(regis);
			
		}
		return registo; 
		
	}
	
	public Registo listaRegisto(int id)
	{
		
		String selectQuery = "SELECT  * FROM " + BD_TABLER + " WHERE " + _ROWIDR +"=" +id ; 
		Cursor c = nBaseDados.rawQuery(selectQuery, null);
		Registo registo = null;
		
		int iSis = c.getColumnIndex(_SIS);
		int iDia = c.getColumnIndex(_DIA);
		int iPul = c.getColumnIndex(_PUL);
		int iCom = c.getColumnIndex(_COMEN);
		int iSit = c.getColumnIndex(_SITIO);
		int iPos = c.getColumnIndex(_POSICAO);
		int iEst = c.getColumnIndex(_ESTADO);
		int iData = c.getColumnIndex(_DATA);
		int iHora = c.getColumnIndex(_HORA);
		int iIDP = c.getColumnIndex(_IDPESSOA);
		int iRowR = c.getColumnIndex(_ROWIDR);
		int iMen = c.getColumnIndex(_MENSAGEM);
		
		
		for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext())
		{
			 registo= new Registo(c.getInt(iRowR), c.getInt(iSis), c.getInt(iDia), c.getInt(iPul), c.getString(iCom), c.getString(iSit), c.getString(iPos),
					c.getString(iEst), c.getString(iData), c.getString(iHora), c.getInt(iIDP), c.getString(iMen));
			
			
		}
		return registo; 
		
	}
	
	public void apagarRegisto(int lRow) throws SQLException
	{
	nBaseDados.delete(BD_TABLER, _ROWIDR + "=" + lRow,null);	
		
	}
	
	public void apagarUtilizador(int lRow) throws SQLException
	{

	nBaseDados.delete(BD_TABLER, _IDPESSOA + "=" + lRow, null);
	nBaseDados.delete(BD_TABLE, _ROWID + "=" + lRow,null);	
		
	}
	
	public Utilizador selectID(int id)
	{
		
		String selectQuery = "SELECT  * FROM " + BD_TABLE + " WHERE " + _ROWID +"=" +id ; 
		Cursor c = nBaseDados.rawQuery(selectQuery, null);
		Utilizador u = null;
		int iRow = c.getColumnIndex(_ROWID);
		int iName = c.getColumnIndex(_NAME);
		int iDataNasc = c.getColumnIndex(_DT);
		int iSexo = c.getColumnIndex(_SEXO);
		
		
		for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext())
		{
			u = new Utilizador(c.getInt(iRow), c.getString(iName),c.getString(iDataNasc),c.getString(iSexo));
		}
		return u;
		
	}
	
	public int editUtilizadores(int idUtilizador, String nome, String dtNasc, String sexo)
	{	
		ContentValues cv = new ContentValues();
		cv.put(_NAME, nome);
		cv.put(_DT, dtNasc);
		cv.put(_SEXO, sexo);
		
		return nBaseDados.update(BD_TABLE, cv, _ROWID +"="+idUtilizador, null);
	}
	
	public int editRegisto(int idRegisto, int sistolica, 
			int diastolica, int pulsacao, String comentario, 
			String sitio, String posicao, String estado, String data, 
			String hora, String mens)
	{	
		ContentValues cv = new ContentValues();
		cv.put(_ROWIDR, idRegisto);
		cv.put(_SIS, sistolica);
		cv.put(_DIA, diastolica);
		cv.put(_PUL, pulsacao);
		cv.put(_COMEN, comentario);
		cv.put(_SITIO, sitio);
		cv.put(_POSICAO, posicao);
		cv.put(_ESTADO, estado);
		cv.put(_DATA, data);
		cv.put(_HORA, hora);
		//cv.put(_IDPESSOA, idPessoa);
		cv.put(_MENSAGEM, mens);
		
		return nBaseDados.update(BD_TABLER, cv, _ROWID +"="+idRegisto, null);
	}
	

}
